import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import Dashboard from '../views/Dashboard.vue'
import TextStudy from '../views/TextStudy.vue'
import VocabularySearch from '../views/VocabularySearch.vue'
import CourseDetail from '../views/CourseDetail.vue'
import LessonDetail from '../views/LessonDetail.vue'
import TextRecall from '../views/TextRecall.vue'
import SentenceStudy from '../views/SentenceStudy.vue'
import WordArrangement from '../views/WordArrangement.vue'
import ListenIdentify from '../views/ListenIdentify.vue'
import DictationPractice from '../views/DictationPractice.vue'
import VocabularyPractice from '../views/VocabularyPractice.vue'
import Grammar from '../views/Grammar.vue'
import PhoneticSymbol from '../views/PhoneticSymbol.vue'
import PhonicsAlphabet from '../views/Phonics.vue'
import Login from '../views/Login.vue'
import LearningStatistics from '../views/LearningStatistics.vue'
import VocabularyBook from '../views/VocabularyBook.vue'
import UserManagement from '../views/UserManagement.vue'
import AnonymousVisits from '../views/AnonymousVisits.vue'

// Import the fingerprint utility and http client
import { generateFingerprint } from '../utils/fingerprint'
import http from '../utils/http'

const routes = [
  {
    path: '/',
    name: 'Dashboard',
    component: Dashboard,
    meta: {
      title: 'English All In One 英语学习平台',
      description:
        'English All In One 英语学习平台仪表盘，查看学习进度和课程信息',
      keywords: '英语学习, 仪表盘, 学习进度, 课程管理'
    }
  },
  {
    path: '/home',
    name: 'Home',
    component: Home,
    meta: {
      title: 'English All In One 英语学习平台 - 全部课程',
      description: '浏览所有英语学习课程，选择适合您的课程开始学习',
      keywords: '英语课程, 英语学习, 在线课程, 英语教学'
    }
  },
  {
    path: '/login',
    name: 'Login',
    component: Login,
    meta: {
      title: '登录 - English All In One 英语学习平台',
      description:
        '登录到English All In One 英语学习平台，开始您的英语学习之旅',
      keywords: '登录, 英语学习, 用户登录, 学习平台'
    }
  },
  {
    path: '/courses',
    name: 'Courses',
    component: Home,
    meta: {
      title: '英语课程 - English All In One 英语学习平台',
      description: '查看所有英语课程，包括基础英语、商务英语、考试英语等',
      keywords: '英语课程, 基础英语, 商务英语, 考试英语'
    }
  },
  {
    path: '/course/:id',
    name: 'CourseDetail',
    component: CourseDetail,
    meta: {
      title: '课程详情 - English All In One 英语学习平台',
      description: '查看英语课程详细信息，包括课程内容、学习目标和进度',
      keywords: '课程详情, 英语课程, 学习目标, 课程内容',
      requireLeftBar: true
    }
  },
  {
    path: '/lesson/:coursePath/:id',
    name: 'LessonDetailWithCourse',
    component: LessonDetail,
    meta: {
      title: '课程内容 - English All In One 英语学习平台',
      description: '学习英语课程内容，提高听说读写能力',
      keywords: '课程内容, 英语学习, 听说读写, 英语练习',
      requireLeftBar: true
    }
  },
  {
    path: '/text-study/:coursePath/:id',
    name: 'TextStudy',
    component: TextStudy,
    meta: {
      title: '课文学习 - English All In One 英语学习平台',
      description: '通过课文学习提高英语阅读理解能力',
      keywords: '课文学习, 阅读理解, 英语阅读, 文本学习',
      requireLeftBar: true
    }
  },
  {
    path: '/text-recall/:coursePath/:id',
    name: 'TextRecall',
    component: TextRecall,
    meta: {
      title: '课文回顾 - English All In One 英语学习平台',
      description: '回顾已学课文内容，巩固英语知识',
      keywords: '课文回顾, 英语复习, 阅读理解, 知识巩固',
      requireLeftBar: true
    }
  },
  {
    path: '/sentence-study/:coursePath/:id',
    name: 'SentenceStudy',
    component: SentenceStudy,
    meta: {
      title: '句子学习 - English All In One 英语学习平台',
      description: '学习英语句子结构和语法知识',
      keywords: '句子学习, 英语语法, 句子结构, 语法学习',
      requireLeftBar: true
    }
  },
  {
    path: '/word-arrangement/:coursePath/:id',
    name: 'WordArrangement',
    component: WordArrangement,
    meta: {
      title: '词汇排列 - English All In One 英语学习平台',
      description: '通过词汇排列练习提高英语词汇运用能力',
      keywords: '词汇排列, 英语词汇, 词汇练习, 单词排序',
      requireLeftBar: true
    }
  },
  {
    path: '/listen-identify/:coursePath/:id',
    name: 'ListenIdentify',
    component: ListenIdentify,
    meta: {
      title: '听力识别 - English All In One 英语学习平台',
      description: '通过听力识别练习提高英语听力水平',
      keywords: '听力识别, 英语听力, 听力练习, 听力训练',
      requireLeftBar: true
    }
  },
  {
    path: '/dictation-practice/:coursePath/:id',
    name: 'DictationPractice',
    component: DictationPractice,
    meta: {
      title: '听写练习 - English All In One 英语学习平台',
      description: '通过听写练习提高英语听力和拼写能力',
      keywords: '听写练习, 英语听力, 英语拼写, 听力训练',
      requireLeftBar: true
    }
  },
  {
    path: '/vocabulary-practice/:coursePath/:id',
    name: 'VocabularyPractice',
    component: VocabularyPractice,
    meta: {
      title: '词汇练习 - English All In One 英语学习平台',
      description: '通过词汇练习巩固和扩展英语词汇量',
      keywords: '词汇练习, 英语词汇, 单词学习, 词汇扩展',
      requireLeftBar: true
    }
  },
  {
    path: '/vocabulary',
    name: 'VocabularySearch',
    component: VocabularySearch,
    meta: {
      title: '词汇查询 - English All In One 英语学习平台',
      description: '查询英语词汇的详细解释、例句和发音',
      keywords: '词汇查询, 英语词典, 单词查询, 英语词汇'
    }
  },
  {
    path: '/grammar',
    name: 'Grammar',
    component: Grammar,
    meta: {
      title: '英语语法 - English All In One 英语学习平台',
      description: '学习英语语法规则和用法',
      keywords: '英语语法, 语法规则, 语法学习, 英语教学'
    }
  },
  {
    path: '/phonetic-symbol',
    name: 'PhoneticSymbol',
    component: PhoneticSymbol,
    meta: {
      title: '音标学习 - English All In One 英语学习平台',
      description: '学习英语音标，提高发音准确性',
      keywords: '音标学习, 英语音标, 发音学习, 语音训练'
    }
  },
  {
    path: '/phonics',
    name: 'PhonicsAlphabet',
    component: PhonicsAlphabet,
    meta: {
      title: '自然拼读 - English All In One 英语学习平台',
      description: '通过自然拼读学习英语发音规律',
      keywords: '自然拼读, 英语发音, 音素学习, 英语基础'
    }
  },
  {
    path: '/phonics/:lessonId/:soundId',
    name: 'PhonicsLesson',
    component: () => import('../views/PhonicsLesson.vue'),
    meta: {
      title: '音素学习 - English All In One 英语学习平台',
      description: '学习英语音素发音',
      keywords: '音素, 英语发音, 自然拼读, 语音学习'
    }
  },
  {
    path: '/learning-statistics',
    name: 'LearningStatistics',
    component: LearningStatistics,
    meta: {
      title: '学习统计 - English All In One 英语学习平台',
      description: '查看英语学习进度和统计数据',
      keywords: '学习统计, 学习进度, 数据分析, 学习报告',
      requiresAuth: true
    }
  },
  {
    path: '/vocabulary-book',
    name: 'VocabularyBook',
    component: VocabularyBook,
    meta: {
      title: '词汇本 - English All In One 英语学习平台',
      description: '管理个人词汇本，复习已学单词',
      keywords: '词汇本, 单词本, 词汇管理, 单词复习',
      requiresAuth: true
    }
  },
  {
    path: '/admin/users',
    name: 'UserManagement',
    component: UserManagement,
    meta: {
      title: '用户管理 - English All In One 英语学习平台',
      description: '管理系统用户信息和权限',
      keywords: '用户管理, 用户信息, 权限管理, 系统管理',
      requiresAuth: true
    }
  },
  {
    path: '/admin/anonymous-visits',
    name: 'AnonymousVisits',
    component: AnonymousVisits,
    meta: {
      title: '匿名访问记录管理 - English All In One 英语学习平台',
      description: '管理匿名用户的访问记录',
      keywords: '匿名访问, 访问记录, 匿名用户, 管理面板',
      requiresAuth: true
    }
  },
  {
    path: '/:pathMatch(.*)*',
    redirect: '/',
    meta: {
      title: 'English All In One 英语学习平台',
      description: '专业的English All In One 英语学习平台',
      keywords: '英语学习, 在线学习, 英语课程'
    }
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})
let visitTimer = null
// 添加导航守卫，在每次路由跳转前添加或更新时间戳参数
router.beforeEach((to, from, next) => {
  // 检查是否访问管理员页面但不是管理员
  if (to.path === '/admin/users' || to.path === '/admin/anonymous-visits') {
    const user = JSON.parse(localStorage.getItem('user') || '{}')
    if (user.role !== 'admin') {
      next({ path: '/' })
      return
    }
  }
  // 如果要进入需要登录的路由，检查用户是否已登录，如果没有登录，则跳转到登录页面
  // 是否需要登录的判断：如果to.meta.requiresAuth为true，则检查用户是否已登录
  if (to.meta.requiresAuth && !localStorage.getItem('token')) {
    next({ path: '/login' })
    return
  }

  // Track anonymous visits
  generateFingerprint().then((fingerprint) => {
    // Only track if user is not logged in
    const pageUrl = window.location.origin + to.fullPath
    visitTimer = setTimeout(() => {
      clearInterval(visitTimer)
      http
        .post('/visits/record', {
          fingerprint,
          pageUrl
        })
        .catch((error) => {
          console.error('Error tracking visit:', error)
        })
    }, 5000)
  })

  // 设置页面标题和meta信息
  if (to.meta && to.meta.title) {
    document.title = to.meta.title
  }

  // 删除已有的meta标签
  const existingDescription = document.querySelector('meta[name="description"]')
  const existingKeywords = document.querySelector('meta[name="keywords"]')

  if (existingDescription) {
    existingDescription.remove()
  }
  if (existingKeywords) {
    existingKeywords.remove()
  }

  // 添加新的meta标签
  if (to.meta && to.meta.description) {
    const description = document.createElement('meta')
    description.name = 'description'
    description.content = to.meta.description
    document.head.appendChild(description)
  }

  if (to.meta && to.meta.keywords) {
    const keywords = document.createElement('meta')
    keywords.name = 'keywords'
    keywords.content = to.meta.keywords
    document.head.appendChild(keywords)
  }

  // 检查是否已经有一个显著不同的时间戳（至少1秒前的时间戳）
  const now = Date.now()
  const toQueryT = parseInt(to.query.t)

  // 如果时间戳不存在或者与当前时间相差超过1秒，则更新它
  if (!to.query.t || isNaN(toQueryT) || Math.abs(now - toQueryT) > 1000) {
    // 创建一个新的查询对象
    const query = { ...to.query }

    // 更新时间戳参数
    query.t = now

    // 使用新的查询参数进行跳转
    next({
      ...to,
      query
    })
  } else {
    // 时间戳是最近的，不需要更新，继续导航
    next()
  }
})

export default router
